/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package serv;

import IA.DistFS.Servers;
import aima.util.Pair;
import java.util.ArrayList;
import java.util.Set;

/**
 *
 * @author ferran
 */
public class OperacionsMid {
        
	public static Estado treure( Estado state, Pair fitx1, int serv){
		Estado e = new Estado(state);
		int tam = e.fitxers.get(serv).size();
		boolean borrat = false;
		for(int i = 0; i < tam && !borrat; ++i){
			if(e.fitxers.get(serv).get(i).getFirst() == fitx1.getFirst() && e.fitxers.get(serv).get(i).getSecond() == fitx1.getSecond()){
				//System.out.println("trec el fitxer :"+e.fitxers.get(serv).get(i));
                                e.fitxers.get(serv).remove(i);
                                
				int usr = (Integer) fitx1.getFirst();
				int temps = Servi.servers.tranmissionTime(serv, usr);
				
                                //System.out.println("Temps serv "+serv+" abans:"+ e.TxServer[serv]);
                                //System.out.println("Temps restat:"+ temps);
                                e.TxServer[serv] -= temps;
                                //System.out.println("Temps serv "+serv+" despres:"+ e.TxServer[serv]);
				borrat = true;
				e.trets.add(fitx1);
			}

		}
		return e;
	}
	
	public static Estado push( Estado state, int fitx_i, int serv ) {
		Estado e = new Estado(state);
		
		Pair fitx = e.trets.get(fitx_i);
		
		int temps = Servi.servers.tranmissionTime(serv, (Integer)fitx.getFirst());
		e.TxServer[serv] += temps;
		e.fitxers.get(serv).add(fitx);
		e.trets.remove(fitx_i);
		
		return e;
	}
	
	public static boolean checkPush( Pair fitx, int serv ) {
		boolean trobat = false;
		Set<Integer> servList = Servi.servers.fileLocations( (int)(Integer)fitx.getSecond() );
		
        for(Integer i : servList){
            if(serv == i) trobat = true;
        }
		return trobat;
	}
	
}
